第23天,再七天!!! 今天看了人家介紹“刺蝟策略”,裡面提到狐狸跟刺蝟,感覺挺可愛的,雖然不是重點。
最少知識原則說的是軟體實體應該盡可能的少與其他實體相互作用。在單一原則中希望我們把所有物件盡可能分成較小的粒子,但越來越多物件之間可能會有更複雜的關係。簡單來說,物件要盡可能的獨立,盡量少互相通聯。常見的做法是引入一個第三者物件,讓這個物件來承擔所有物件之間的通訊。
最少知識原則在設計模式中最常用的就是中介者模式和外觀模式。中介者模式中,我們範例都會做一個中介者物件讓所有相關的物件透過此中介者物件來通知其他物件要進行一些行為,這樣就是符合最少知識原則。
外觀模式我們之前並沒有練習過,本書“JavaScript設計模式與開發實踐”作者認為在JS中使用的場景並不多。在這裡簡單說明,外觀模式指的是把一堆物件透過一個簡單易用的介面,讓使用者的請求都經由這個介面來發送請求,除了透過此介面,使用者仍可以越過這個介面存取這些物件。像是現在的洗衣機都有浸泡、洗衣、脫水的功能,你可以透過‘啟動’按鈕來自動執行這些流程,啟動按鈕就是這個介面,但你仍可以透過其他按鈕調整每次浸泡或是洗衣這些功能的時間。如果用code來表示,可以這樣寫
var A = function () {
a1();
a2();
};
var B = function () {
b1();
b2();
};
var facade = function () {
A();
B();
};
facade();
就使用者而言其實完全不知道這些方法的實作,只要透過介面來使用就好,所以這樣也是符合最少知識原則的。
另外最少知識原則,既然都叫原則了就不一定是強制的。因為透過第三者當介面的關係,萬一內容物件一多容易造成介面物件過於龐大且複雜,是否要讓程式符合最少知識原則可能要實際依據環境而決定。